package com.example.generic;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/**
 * 常用的通配符为： T，E，K，V，？
 *
 * ？ 表示不确定的 java 类型
 * T (type) 表示具体的一个 java 类型
 * K V (key value) 分别代表 java 键值中的 Key Value
 * E (element) 代表 Element
 */
public class Generics {

    /**
     * 泛型擦除
     * @param args
     */
    public static void main(String[] args) {
        List<Integer> list=new ArrayList<>();

        list.add(22);
//      这里会报错
//      list.add("a");

        Class<? extends  List> clazz=list.getClass();
        try {
//            通过反射可以添加不同类型的
            Method add=clazz.getDeclaredMethod("add",Object.class);
            add.invoke(list,"k1");
            System.out.println(list);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}
